package org.springframework.beanLifeCycle.entity;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Author: T-jack
 * @Date: 2024-01-03-11:20
 * @Description: bean的生命周期实体类
 * bean 初始化顺序
 * 构造方法->依赖注入->初始化->销毁
 */
@Component
@Slf4j
public class LifeCycleBean {

	public LifeCycleBean() {
		log.debug("构造方法");
	}

	@Autowired
	public void autowire(@Value("${JAVA_HOME}") String name) {
		log.debug("依赖注入：{}", name);
	}

	/**
	 * java jdk提供的注解 作用于Servlet生命周期的注解，实现Bean初始化之前和销毁之前的自定义操作
	 * 该注解的方法在整个Bean初始化中的执行顺序：
	 * Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的初始化方法)
	 */

	@PostConstruct
	public void init() {
		log.debug("初始化");
	}

	/**
	 * 被@PreDestroy修饰的方法会在destroy()方法之后运行，在Servlet被彻底卸载之前。执行顺序如下所示。
	 * 调用destroy()方法->@PreDestroy注释方法->destroy()方法->bean销毁。
	 */
	@PreDestroy
	public void destroy() {
		log.debug("销毁");
	}
}
